import router from '@/router'
import store from '@/store'
import Layout from '@/layout' // Layout 是架构组件，不在后台返回，在文件里单独引入
const _import = require('@/router/_import_' + process.env.NODE_ENV)// 获取组件的方法
import { getRouters } from '@/api/routers'

var routes = [
  // 电子地图
  // {
  //   path: '/emap',
  //   name: 'Emap',
  //   redirect: '/emap/emap-show',
  //   component: 'Layout',
  //   meta: { title: '电子地图', icon: 'form' },
  //   children: [
  //     {
  //       path: 'emap-show',
  //       name: 'EmapShow',
  //       component: 'emap/emapShow',
  //       meta: { title: '地图展示', icon: 'form' }
  //     },
  //     {
  //       path: 'emap-manage',
  //       name: 'EmapManage',
  //       component: 'emap/emapManage',
  //       meta: { title: '组态设置', icon: 'form' }
  //     }
  //     // {
  //     //   path: 'emap-shizhan',
  //     //   name: 'EmapShi',
  //     //   component: 'emap/shi',
  //     //   meta: { title: '实战', icon: 'form' }
  //     // }
  //   ]
  // },
  // 人员管理
  {
    path: '/personnel-manage',
    component: 'Layout',
    name: 'PersonnelManage',
    meta: { title: '人员管理', icon: 'form' },
    children: [
      {
        path: 'personnel',
        name: 'Personnel',
        component: 'personnelManage/personnel',
        meta: { title: '人员信息', icon: 'table' }
      },
      {
        path: 'blackList',
        name: 'BlackList',
        component: 'personnelManage/blackList',
        meta: { title: '黑名单人员', icon: 'tree' }
      },
      {
        path: 'visitor',
        name: 'Visitor',
        component: 'personnelManage/visitor',
        meta: { title: '访客人员', icon: 'tree' }
      },
      {
        path: 'details/:id',
        name: 'PersonnelDetails',
        component: 'personnelManage/details',
        meta: { title: '人员详情', icon: 'tree' },
        hidden: true
      },
      {
        path: 'personRoute',
        name: 'PersonRoute',
        component: 'personnelManage/personRoute',
        meta: { title: '人员轨迹', icon: 'tree' },
        hidden: true
      },
      {
        path: 'blackListRoute',
        name: 'BlackListRoute',
        component: 'personnelManage/blackListRoute',
        meta: { title: '人员轨迹', icon: 'tree' },
        hidden: true
      },
      {
        path: 'visitorRoute',
        name: 'VisitorRoute',
        component: 'personnelManage/visitorRoute',
        meta: { title: '人员轨迹', icon: 'tree' },
        hidden: true
      },
      {
        path: 'visitorRecord',
        name: 'VisitorRecord',
        component: 'personnelManage/visitorRecord',
        meta: { title: '拜访记录', icon: 'tree' },
        hidden: true
      }
    ]
  },
  // 门禁管理
  // {
  //   path: '/access-control',
  //   component: 'Layout',
  //   redirect: '/access-control/device',
  //   name: 'PersonnelManage',
  //   meta: { title: '门禁系统', icon: 'form' },
  //   children: [
  //     {
  //       path: 'device',
  //       name: 'AccessDevice',
  //       component: 'accessControl/device',
  //       meta: { title: '门禁设备', icon: 'table' }
  //     },
  //     {
  //       path: 'details/:id',
  //       name: 'AccessDeviceDetails',
  //       component: 'accessControl/details',
  //       meta: { title: '门禁设备详情', icon: 'table' },
  //       hidden: true
  //     },
  //     {
  //       path: 'config',
  //       name: 'AccessConfig',
  //       component: 'accessControl/config',
  //       meta: { title: '门禁配置', icon: 'table' }
  //     },
  //     {
  //       path: 'role',
  //       name: 'AccessRole',
  //       component: 'accessControl/role',
  //       meta: { title: '门禁权限', icon: 'tree' }
  //     },
  //     {
  //       path: 'logs',
  //       name: 'AccessLogs',
  //       component: 'accessControl/logs',
  //       meta: { title: '门禁记录', icon: 'tree' }
  //     }
  //   ]
  // },
  // 可视对讲管理
  // {
  //   path: '/video-intercom',
  //   component: 'Layout',
  //   redirect: '/video-intercom/device',
  //   name: 'VideoIntercom',
  //   meta: { title: '对讲系统', icon: 'form' },
  //   children: [
  //     {
  //       path: 'device',
  //       name: 'IntercomDevice',
  //       component: 'videoIntercom/device',
  //       meta: { title: '对讲设备', icon: 'table' }
  //     },
  //     {
  //       path: 'config',
  //       name: 'IntercomConfig',
  //       component: 'videoIntercom/config',
  //       meta: { title: '对讲配置', icon: 'table' }
  //     },
  //     {
  //       path: 'role',
  //       name: 'IntercomRole',
  //       component: 'videoIntercom/role',
  //       meta: { title: '对讲权限', icon: 'tree' }
  //     },
  //     {
  //       path: 'logs',
  //       name: 'IntercomLogs',
  //       component: 'videoIntercom/logs',
  //       meta: { title: '对讲记录', icon: 'tree' }
  //     }
  //   ]
  // },
  // 集中监控
  {
    path: '/cenMonitor',
    component: 'Layout',
    // redirect: '/cenMonitor/videoSurveil',
    name: 'CenMonitor',
    meta: { title: '集中监控', icon: 'form' },
    alwaysShow: true,
    children: [
      // 视频监控
      {
        path: 'videoSurveil',
        name: 'VideoSurveil',
        component: 'cenMonitor/videoSurveil',
        meta: { title: '视频监控', icon: 'form' }
      },
      // 门禁监控
      {
        path: 'accessControl',
        name: 'AccessControl',
        component: 'cenMonitor/accessControl',
        meta: { title: '门禁监控', icon: 'form' }
      },
      // 紧急报警
      {
        path: 'siren',
        name: 'Siren',
        component: 'cenMonitor/siren',
        meta: { title: '紧急报警', icon: 'form' }
      },
      // 建筑机电设备智能管理
      {
        path: 'architecture',
        name: 'Architecture',
        component: 'cenMonitor/architecture',
        meta: { title: '建筑机电设备智能管理', icon: 'form' }
      },
      // 建筑能效监管子系统
      {
        path: 'energy',
        name: 'energy',
        component: 'cenMonitor/energy',
        meta: { title: '建筑能效监管子系统', icon: 'form' }
      },
      // 停车场智能管理子系统
      {
        path: 'parking',
        name: 'Parking',
        component: 'cenMonitor/parking',
        meta: { title: '停车场智能管理子系统', icon: 'form' }
      },
      // 火灾报警子系统
      {
        path: 'fire',
        name: 'Fire',
        component: 'cenMonitor/fire',
        meta: { title: '火灾报警子系统', icon: 'form' }
      }
    ]
  },
  // {
  //   path: '/video-surveillance',
  //   component: 'Layout',
  //   redirect: '/video-surveillance/device',
  //   name: 'VideoSurveillance',
  //   meta: { title: '视频监控', icon: 'form' },
  //   children: [
  //     {
  //       path: 'device',
  //       name: 'VideoDevice',
  //       component: 'videoSurveillance/device',
  //       meta: { title: '监控设备', icon: 'table' }
  //     },
  //     {
  //       path: 'logs',
  //       name: 'VideoLogs',
  //       component: 'videoSurveillance/logs',
  //       meta: { title: '报警记录', icon: 'table' }
  //     }
  //   ]
  // },
  // 停车场管理
  // {
  //   path: '/carpark',
  //   component: 'Layout',
  //   name: 'Carpark',
  //   meta: { title: '车场系统', icon: 'form' },
  //   children: [
  //     {
  //       path: 'device',
  //       name: 'CarparkDevice',
  //       component: 'carpark/device',
  //       meta: { title: '车场设备', icon: 'table' }
  //     },
  //     {
  //       path: 'details/:id',
  //       name: 'CarparkDeviceDetails',
  //       component: 'carpark/details',
  //       meta: { title: '车场设备详情', icon: 'table' },
  //       hidden: true
  //     },
  //     {
  //       path: 'car',
  //       name: 'CarparkCar',
  //       component: 'carpark/car',
  //       meta: { title: '车辆管理', icon: 'tree' }
  //     },
  //     {
  //       path: 'role',
  //       name: 'CarparkRole',
  //       component: 'carpark/role',
  //       meta: { title: '车辆权限', icon: 'tree' }
  //     },
  //     {
  //       path: 'logs',
  //       name: 'CarparLogs',
  //       component: 'carpark/logs',
  //       meta: { title: '通行记录', icon: 'table' }
  //     }
  //   ]
  // },
  // // 信息发布管理
  // {
  //   path: '/message-publish',
  //   component: 'Layout',
  //   name: 'MessagePublish',
  //   meta: { title: '信息发布', icon: 'form' },
  //   children: [
  //     {
  //       path: 'device',
  //       name: 'MessageDevice',
  //       component: 'messagePublish/device',
  //       meta: { title: '设备信息', icon: 'table' }
  //     },
  //     {
  //       path: 'fire-alarm',
  //       name: 'MessageFireAlarm',
  //       component: 'messagePublish/fireAlarm',
  //       meta: { title: '消防报警', icon: 'table' }
  //     },
  //     {
  //       path: 'logs',
  //       name: 'MessageLogs',
  //       component: 'messagePublish/logs',
  //       meta: { title: '播放记录', icon: 'table' }
  //     },
  //     {
  //       path: 'push-video-intercom',
  //       name: 'PushVideoIntercom',
  //       component: 'messagePublish/pushVideoIntercom',
  //       meta: { title: '信息推送', icon: 'table' }
  //     }
  //   ]
  // },
  // // 运维巡检
  // {
  //   path: '/devops',
  //   component: 'Layout',
  //   name: 'Devops',
  //   meta: { title: '运维保养', icon: 'form' },
  //   children: [
  //     {
  //       path: 'device',
  //       name: 'DevopsDevice',
  //       component: 'devops/device',
  //       meta: { title: '保养设备', icon: 'table' }
  //     },
  //     {
  //       path: 'config',
  //       name: 'DevopsConfig',
  //       component: 'devops/config',
  //       meta: { title: '设备配置', icon: 'table' }
  //     },
  //     {
  //       path: 'plan',
  //       name: 'DevopsPlan',
  //       component: 'devops/plan',
  //       meta: { title: '保养计划', icon: 'table' }
  //     },
  //     {
  //       path: 'maintain',
  //       name: 'Maintain',
  //       component: 'devops/maintain',
  //       meta: { title: '保养工单', icon: 'table' }
  //     },
  //     {
  //       path: 'repair',
  //       name: 'Repair',
  //       component: 'devops/repair',
  //       meta: { title: '报修工单', icon: 'table' }
  //     }
  //   ]
  // },
  // // 巡更管理
  // {
  //   path: '/patrol',
  //   component: 'Layout',
  //   name: 'Patrol',
  //   meta: { title: '巡更管理', icon: 'form' },
  //   children: [
  //     {
  //       path: 'device',
  //       name: 'PatrolDevice',
  //       component: 'patrol/device',
  //       meta: { title: '巡更设备', icon: 'table' }
  //     },
  //     {
  //       path: 'location',
  //       name: 'Location',
  //       component: 'patrol/location',
  //       meta: { title: '位置管理', icon: 'table' }
  //     },
  //     {
  //       path: 'route',
  //       name: 'Route',
  //       component: 'patrol/route',
  //       meta: { title: '巡更路线', icon: 'table' }
  //     },
  //     {
  //       path: 'plan',
  //       name: 'Plan',
  //       component: 'patrol/plan',
  //       meta: { title: '巡更任务', icon: 'table' }
  //     },
  //     {
  //       path: '/logs',
  //       name: 'PatrolLogs',
  //       component: 'patrol/logs',
  //       meta: { title: '巡更记录', icon: 'table' }
  //     }
  //   ]
  // },
  // // 资产管理
  // {
  //   path: '/assets',
  //   component: 'Layout',
  //   name: 'Assets',
  //   meta: { title: '资产管理', icon: 'form' },
  //   children: [
  //     {
  //       path: 'overview',
  //       name: 'Overview',
  //       component: 'assets/overview',
  //       meta: { title: '资产概览', icon: 'table' }
  //     },
  //     {
  //       path: 'category',
  //       name: 'Category',
  //       component: 'assets/category',
  //       meta: { title: '资产类目', icon: 'table' }
  //     },
  //     {
  //       path: 'message',
  //       name: 'AssetsMessage',
  //       component: 'assets/message',
  //       meta: { title: '资产信息', icon: 'table' }
  //     },
  //     {
  //       path: 'details/:id',
  //       name: 'AssetsMessageDetails',
  //       component: 'assets/details',
  //       meta: { title: '资产信息详情', icon: 'table' },
  //       hidden: true
  //     }
  //   ]
  // },
  // // 联动设置
  // {
  //   path: '/linkage',
  //   component: 'Layout',
  //   redirect: '/linkage/index',
  //   children: [
  //     {
  //       path: 'index',
  //       name: 'Linkage',
  //       component: 'linkage',
  //       meta: { title: '联动设置', icon: 'form' }
  //     }
  //   ]
  // },
  // // 个人消息
  // {
  //   path: '/my-news',
  //   component: 'Layout',
  //   redirect: '/my-news/index',
  //   children: [
  //     {
  //       path: 'index',
  //       name: 'MyNews',
  //       component: 'myNews',
  //       meta: { title: '我的消息', icon: 'form' }
  //     }
  //   ]
  // },
  // // 系统设置
  // {
  //   path: '/settings',
  //   component: 'Layout',
  //   name: 'Settings',
  //   meta: { title: '系统设置', icon: 'form' },
  //   children: [
  //     {
  //       path: 'base2',
  //       name: 'SettingsBase',
  //       component: 'settings/base',
  //       meta: { title: '通用设置', icon: 'form' }
  //     },
  //     {
  //       path: 'organize',
  //       name: 'SettingsOrganize',
  //       component: 'settings/organize',
  //       meta: { title: '空间结构', icon: 'form' }
  //     }
  //   ]
  // },

  // 配置
  {
    path: '/deploy',
    component: 'Layout',
    name: 'Deploy',
    meta: { title: '配置', icon: 'form' },
    children: [
      {
        path: 'role',
        name: 'Role',
        component: 'deploy/role',
        meta: { title: '角色管理', icon: 'form' }
      },
      {
        path: 'approve',
        name: 'Approve',
        component: 'deploy/approve',
        meta: { title: '审批管理', icon: 'form' }
      },
      {
        path: 'organization',
        name: 'Organization',
        component: 'deploy/organization',
        meta: { title: '组织机构管理', icon: 'form' }
      },
      {
        path: 'property',
        name: 'Property',
        component: 'deploy/property',
        meta: { title: '资产类目', icon: 'form' }
      },
      {
        path: 'system',
        name: 'System',
        component: 'deploy/system',
        meta: { title: '应用系统', icon: 'form' }
      },
      {
        path: 'couplet',
        name: 'Couplet',
        component: 'deploy/couplet',
        meta: { title: '联动管理', icon: 'form' }
      },
      {
        path: 'space',
        name: 'Space',
        component: 'deploy/space',
        meta: { title: '空间结构', icon: 'form' }
      },
      {
        path: 'notice',
        name: 'Notice',
        component: 'deploy/notice',
        meta: { title: '公告管理', icon: 'form' }
      },
      {
        path: 'tidings',
        name: 'Tidings',
        component: 'deploy/tidings',
        meta: { title: '消息管理', icon: 'form' }
      },
      {
        path: 'merchant',
        name: 'Merchant',
        component: 'deploy/merchant',
        meta: { title: '商户管理', icon: 'form' }
      }
    ]
  },
  // 运维
  {
    path: '/maintenance',
    component: 'Layout',
    name: 'Maintenance',
    meta: { title: '运维', icon: 'form' },
    children: [
      {
        path: 'inspection',
        name: 'Inspection',
        component: 'maintenance/inspection',
        meta: { title: '巡检', icon: 'form' }
      },
      {
        path: 'order',
        name: 'Order',
        component: 'maintenance/order',
        meta: { title: '工单', icon: 'form' }
      },
      {
        path: 'orderRoute',
        name: 'OrderRoute',
        component: 'maintenance/orderRoute',
        meta: { title: '新建工单', icon: 'tree' },
        hidden: true
      },
      {
        path: 'serviceprovider',
        name: 'Serviceprovider',
        component: 'maintenance/serviceprovider',
        meta: { title: '服务商管理', icon: 'tree' }
      },
      {
        path: 'record',
        name: 'record',
        component: 'maintenance/record',
        meta: { title: '数据管理', icon: 'tree' }
      }
    ]
  },
  // 资产管理
  {
    path: '/asset',
    component: 'Layout',
    name: 'Asset',
    meta: { title: '资产管理', icon: 'form' },
    children: [
      {
        path: 'assetinformation',
        name: 'Assetinformation',
        component: 'asset/assetinformation',
        meta: { title: '资产信息', icon: 'form' }
      }
    ]
  },
  // 车辆管理
  {
    path: '/vehiclemanagement',
    component: 'Layout',
    name: 'Vehiclemanagement',
    meta: { title: '车辆管理', icon: 'form' },
    children: [
      {
        path: 'vehicletype',
        name: 'Vehicletype',
        component: 'vehiclemanagement/vehicletype',
        meta: { title: '车辆类型', icon: 'form' }
      },
      {
        path: 'vehicleinformation',
        name: 'Vehicleinformation',
        component: 'vehiclemanagement/vehicleinformation',
        meta: { title: '车辆信息', icon: 'form' }
      },
      {
        path: 'vehiclerecord',
        name: 'Vehiclerecord',
        component: 'vehiclemanagement/vehiclerecord',
        meta: { title: '车辆通行记录', icon: 'form' }
      },
      {
        path: 'vehicleaccess',
        name: 'Vehicleaccess',
        component: 'vehiclemanagement/vehicleaccess',
        meta: { title: '车辆进出记录', icon: 'form' }
      },
      {
        path: 'blacklist',
        name: 'Blacklist',
        component: 'vehiclemanagement/blacklist',
        meta: { title: '黑名单管理', icon: 'form' }
      },
      {
        path: 'vehiclealarm',
        name: 'Vehiclealarm',
        component: 'vehiclemanagement/vehiclealarm',
        meta: { title: '车辆报警记录', icon: 'form' }
      }
    ]
  },

  // 404 page must be placed at the end !!!
  { path: '*', redirect: '/404', hidden: true }
]

// 变量控制 避免陷入死循环
let flag = true
export function wayGetAsyncRoutes (to, from, next) {
  // vuex中routes动态路由为空时(动态路由为空时)
  store.commit('routers/SET_ASYNCROUTES', routes)
  if (store.getters.routes.length == 0) {
    routerGo(to, next) // 执行路由跳转方法
    // getRouters()
    //   .then(res => {
    //     if (res.code === 20000) {
    //       // 动态路由未处理前
    //       store.commit('routers/SET_ASYNCROUTES', res.data.routes)

    //       routerGo(to, next) //执行路由跳转方法
    //     }
    //   })
    //   .catch(err => {
    //     console.log('err',err)
    //   })
  } else {
    if (flag) {
      flag = false
      routerGo(to, next)
    }
  }
}

function routerGo (to, next) {
  const constantRoutes = router.options.routes // 常量路由
  let asyncRoutes = JSON.parse(JSON.stringify(store.getters.asyncRoutes)) // 动态路由
  asyncRoutes = filterAsyncRouter(asyncRoutes) // 过滤动态路由
  // 动态路由处理后
  // store.commit('routers/SET_ASYNCROUTES', asyncRoutes)
  const routes = constantRoutes.concat(asyncRoutes)
  store.commit('routers/SET_ROUTES', routes) // 全部路由
  router.addRoutes(asyncRoutes) // 动态添加路由

  next({ ...to, replace: true }) // 必不可少的，确保你的动态路由创建成功再去执行其它代码
}

// 遍历后台传来的路由字符串，转换为组件对象
function filterAsyncRouter (asyncRouterMap) {
  const accessedRouters = asyncRouterMap.filter(route => {
    if (route.component) {
      if (route.component === 'Layout') { // Layout组件特殊处理
        route.component = Layout
      } else {
        route.component = _import(route.component)
      }
    }
    if (route.children && route.children.length) {
      route.children = filterAsyncRouter(route.children)
    }
    return true
  })

  return accessedRouters
}
